﻿using System;
using System.Collections.Generic;

using System.Text;

namespace Rance.Battle
{
    class 火枪AI : AI
    {
        public override AIResult Excute(角色 角色, 队伍状况 队伍状况, AI技能MGT 技能mgt)
        {
            AIResult result = new AIResult();
            //辅助
            if (技能mgt.Has("恫吓"))
            {
                var 恫吓 = 技能mgt.Get("恫吓");
                result.Action = 恫吓.Name;
                result.TargetList = 恫吓.TargetList[0].List;
                return result;
            }
            //攻击
            //优先使用瞄准
            if (队伍状况.战场.剩余回合数 >= 10 && 技能mgt.Has("瞄准") && 角色.攻击赋予 == null)
            {
                var 瞄准 = 技能mgt.Get("瞄准");
                result.Action = 瞄准.Name;
                result.TargetList.Add(角色);

                return result;
            }

            var 火枪射击 = 技能mgt.Get("火枪射击");
            if (火枪射击 == null)
                return null;
            var 火枪射击target = getTarget(ConvertSoloTarget(火枪射击.TargetList), 队伍状况);
            result.Action = 火枪射击.Name;
            result.TargetList.Add(火枪射击target);

            return result;
        }

        private 角色 getTarget(List<角色> targetList, 队伍状况 队伍状况)
        {
            //优先攻击"准备中"的敌人
            List<角色> tempList = new List<角色>();
            foreach (var item in targetList)
            {
                if (item.是否准备)
                    tempList.Add(item);
            }
            if (tempList.Count == 1)
                return targetList[0];
            else if (tempList.Count > 1)
            {
                var value = 队伍状况.战场.AI乱数表.Random(0, tempList.Count);
                return tempList[value];
            }

            //撇除"步卒"敌人
            tempList.Clear();
            foreach (var item in targetList)
            {
                if (item.兵种.类型 != "步卒")
                    continue;

                tempList.Add(item);
            }

            if (tempList.Count != 0)
                targetList = tempList;

            targetList.Sort((v1, v2) => v1.兵力.CompareTo(v2.兵力));
            targetList.Reverse();
            return targetList[0];
        }

        private static 火枪AI instance = new 火枪AI();
        public static 火枪AI GetInstance()
        {
            return instance;
        }
    }
}
